package com.cman777.springc.sample.bean.po;

import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.cman777.springc.common.bean.entity.BaseEntity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.cman777.springc.common.bean.enums.YesNoCodeEnum;
import com.cman777.springc.ratelimiter.alg.AlgEnum;
import com.cman777.springc.ratelimiter.rule.RateRule;
import lombok.*;

/**
 * <p>
 * 
 * </p>
 *
 * @author czc
 * @since 2020-10-26
 */
@Setter
@Getter
@Builder
@NoArgsConstructor
@AllArgsConstructor
@TableName("ratelimit_rule")
public class RatelimitRule extends BaseEntity {


    @TableId(value = "id", type = IdType.AUTO)
    private Long id;

    /**
     * 时间窗口限制次数
     */
    @TableField("limitTimes")
    private Long limitTimes;

    /**
     * 时间窗口周期 单位秒
     */
    @TableField("unit")
    private Long unit;

    /**
     * 限流算法
     */
    @TableField("alg")
    private AlgEnum alg;

    /**
     * target收集器的名称
     */
    @TableField("collector")
    private String collector;

    /**
     * 选取的target属性,用于划分维度,逗号分隔
     */
    @TableField("attributes")
    private String attributes;

    /**
     * 维度下需要限流的具体的个体，分隔符使用&next通配符使用*,顺序与dimension中的属性对应
     */
    @TableField("val")
    private String val;

    /**
     * 同一维度，如果收集属性满足val的规则有多个，取哪个规则的优先级
     */
    @TableField("order_num")
    private Integer orderNum;

    /**
     * 是否开启
     */
    @TableField("enabled")
    private YesNoCodeEnum enabled;

    /**
     * 备注
     */
    @TableField("memo")
    private String memo;


}
